package controllers;

import play.*;
import play.db.DB;
import play.db.jpa.JPA;
import play.mvc.*;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;

import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.hibernate.Query;
import org.hibernate.annotations.NamedQuery;

import models.*;

public class ManterPessoa extends Controller {
	 public static void getPessoas(String termoBusca) {
		 	
		 Logger.info("Metodo getPessoa foi chamado!");
		 //query.setMaxResults(pageSize);
		 javax.persistence.Query query = JPA.em().createQuery("select  p.id, p.nome from Pessoa p where p.nome like '%" + termoBusca +"%'");
		 query.setMaxResults(11);
		    List<Pessoa> pessoas = query.getResultList();
		 //List<Pessoa> pessoas = Pessoa.find("select TOP 10 p.id, p.nome from Pessoa p where p.nome like '%" + termoBusca +"%'").fetch(); 
	     render(pessoas);
	 }
	 public static void cadastrarPessoa(String nomeCompleto, String nome, String email, String cpf, String senha, String senhaRepetida) {
		 	
		 String sql = "insert into Pessoa (nomeCompleto, nome, email, cpf, senha) values ('"+nomeCompleto+"', '"+nome+"', '"+email+"', '"+cpf+"', '"+senha+"' )";
	    	boolean query = DB.execute(sql);
	    	
			
	    	Logger.info("Cadastrando novo usuário!");
	    	//Pessoa usuario = new Pessoa( nomeCompleto, nome, senha,email, cpf);
	    	//usuario.save();
	       render();
	 }
	 
	 public static List<Papel> pegarPapeis(int idPessoa) {
	    	//List<Pessoa> pessoas = Pessoa.find("id", idPessoa).fetch();
			//Pessoa pessoa = pessoas.get(0);
			//Long pessoaId =  pessoa.id;
			List<PessoaPapeis> pessoaPapeis = PessoaPapeis.find("pessoa_id", idPessoa).fetch();
			List<Papel> papeis = new ArrayList<Papel>();
			for(int x=0; x<pessoaPapeis.size(); x++) {
				
				papeis.add(pessoaPapeis.get(x).papel);
			}
	    	return papeis;
	    	
	  }
	 public static List<Papel> pegarPapeisDisponiveis(List<Papel> papeisDaPessoa) {
		 List<Papel> papeisDisponiveis = Papel.all().fetch();
		 List<Papel> papeisParaAdd = new ArrayList<Papel>();
		 boolean temPapel=false;
		 for(int x=0; x<papeisDisponiveis.size(); x++) {
			 temPapel=false;
			 for(int y=0;y<papeisDaPessoa.size();y++){
				 if(papeisDaPessoa.get(y).equals(papeisDisponiveis.get(x))) {
					 temPapel=true;
					 
				 }
			 }
			 if(!temPapel) {
				 papeisParaAdd.add(papeisDisponiveis.get(x));
			 }
			 
		 }
		 return papeisParaAdd;
		 
	 }
	 public static void alterarPessoa(String idPessoa, String nomeCompleto, String nome, String email, String cpf, String senha, String senhaRepetida) {
		 	
		 String sql = "update Pessoa set nomeCompleto='" + nomeCompleto  + "', nome='"+ nome  +"', email='" + email + "', cpf='" + cpf + "', senha='"+ senha +"' where id="+idPessoa;
	    	boolean query = DB.execute(sql);
	    	
			
	    	Logger.info("Alterando usuário!");
	    	//Pessoa usuario = new Pessoa( nomeCompleto, nome, senha,email, cpf);
	    	//usuario.save();
	       render();
	 }	 
	 
	 public static void getPessoa(String idPessoa) throws SQLException {
		 /*
		 String sql = "insert into tabela(campo1) values(1)";
		 createQuery( sql ).executeUpdate();	
		 */
		 Logger.info("Metodo getPessoa foi chamado!");
		 javax.persistence.Query query = JPA.em().createQuery("select id, nome, cpf, email, nomeCompleto   from Pessoa p where id=" + idPessoa );
		    List<Pessoa> pessoas = query.getResultList();
		    Object pessoa =  pessoas.get(0);
		 List<Papel> papeis =  pegarPapeis(Integer.parseInt(idPessoa));
		  //  ResultSet resultado =  DB.executeQuery("select  pp.papel_id as pessoaID, pp.pessoa_id as papelId, p.descricao as descricao from PessoaPapeis pp inner join Papel p on p.id = pp.papel_id where pp.pessoa_id = 1" );
		   // List<Object> papeis = query2.getResultList();
		  //  resultado.next();
		   // String papeldescri=  resultado.getString("descricao");
		    
		 List<Papel> papeisParaAdd = pegarPapeisDisponiveis(papeis);   
		 //List<Pessoa> pessoas = Pessoa.find("select p.id, p.nome from Pessoa p where p.nome like '%" + termoBusca +"%'").fetch(); 
	     render(pessoa, papeis, papeisParaAdd);
	 }	 
	 
	 public static void addPapel(String idPessoa, String idPapel) {
		 String sql = "insert into PessoaPapeis (pessoa_id, papel_id) values("+ idPessoa +", "+ idPapel +")";
	    	boolean query = DB.execute(sql);
	    	
			
	    	Logger.info("Adcionando novo papel!");
	    	//Pessoa usuario = new Pessoa( nomeCompleto, nome, senha,email, cpf);
	    	//usuario.save();
	       render();
		 
	 }
	 
	 public static void excluirPessoa(String idPessoa) {
		 	
		 String sql = "delete from Pessoa where id = " + idPessoa;
	    	boolean query = DB.execute(sql);
	    	
			
	    	Logger.info("Deletando Usuário!");
	    	//Pessoa usuario = new Pessoa( nomeCompleto, nome, senha,email, cpf);
	    	//usuario.save();
	       render();
	 }
	 
	 public static void excluirPapel(String idPessoa, String idPapel ) {
		 	
		 String sql = "delete from PessoaPapeis where pessoa_id = " + idPessoa +" and  papel_id = " +idPapel;
	    	boolean query = DB.execute(sql);
	    	
			
	    	Logger.info("Deletando Usuário!");
	    	//Pessoa usuario = new Pessoa( nomeCompleto, nome, senha,email, cpf);
	    	//usuario.save();
	       render();
	 }
}
